<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
 */

// 引入passport的路由, 可以设置路由前缀
// Dusterio\LumenPassport\LumenPassport::routes($app, ['prefix' => 'v1/oauth']);
Dusterio\LumenPassport\LumenPassport::routes($app);

// 登录认证和刷新token
$app->post('/login', 'Api\V1\AuthController@login');
$app->post('/refresh-token', 'Api\V1\AuthController@refreshToken');
$app->group([
    // 'prefix' => 'test',
    'namespace'  => 'Api\V1',
    // 'prefix'     => 'api',
    'middleware' => [
        // 'auth:api',
        'cors',
        'verifydevicetoken',
        //'api.throttle'
    ]],
    function () use ($app) {
        /**
         * 清除缓存接口
         */
        $app->post('/clear_cache', 'ClearCacheController@index');
        // 查看是否连接redis
        $app->get('/connect_redis', 'ClearCacheController@show');

        /**
         * 用于cms接口数据准备完毕,调用接口, 生成静态文件
         */
        $app->post('/datas/release', 'DataExportController@index');

        /**
         * 请求转发-代理
         */
        $app->get('/proxy', 'ProxyController@index');

        /**
         * 生成加密签名
         */
        $app->get('/movies/signature', 'MovieSignatureController@index');
        /*
         * 订单保存
         */
        $app->post('/{spid}/{termid}/pricelist', 'PriceListController@store');
        // 更新订单信息
        $app->post('/{spid}/{termid}/pricelist/update', 'PriceListController@update');

        // 获取推送消息接口
        $app->get('/{spid}/message/list', 'MessageController@show');
        // 获取首页栏目信息
        $app->get('/{spid}/{termid}/collist/{collistid}/index', 'ColistController@index');
        // 获取区位模板相关信息
        $app->get('/{spid}/{termid}/area/template_type/{template_type}/template_no/{template_no}', 'TemplateAreaDataController@show');
        // $app->get('/{spid}/{termid}/area/template_type/{template_type}/template_no/{template_no}', 'TemplateAreaDataController@index');
        // 获取指定服务商全部栏目列表
        $app->get('/{spid}/{termid}/collist', 'ColistController@collistIndex');
        // 获取指定服务商指定栏目列表信息
        $app->get('/{spid}/{termid}/collist/{collistid}/meta', 'ColistController@metaIndex');
        // 获取指定服务商 指定栏目列表 栏目数据.
        $app->get('/{spid}/{termid}/collist/{collistid}/columns/{columnid}', 'ColistController@columnsIndex');

        // 获取指定服务商指定 栏目信息
        $app->get('/{spid}/{termid}/column/{columnid}/meta', 'ColumnController@metaIndex');

        // 获取栏目的全级数据
        $app->get('/{spid}/{termid}/column/{columnid}/list', 'ColumnController@listIndex');
        // 获取栏目的0级数据
        $app->get('/{spid}/{termid}/column/{columnid}/list0', 'ColumnController@list0Index');
        // 获取栏目的01级数据
        $app->get('/{spid}/{termid}/column/{columnid}/list1', 'ColumnController@list1Index');
        // 获取栏目的02级数据
        $app->get('/{spid}/{termid}/column/{columnid}/list2', 'ColumnController@list2Index');
        // 根据2级分类获取的栏目数据.
        $app->get('/{spid}/{termid}/column/{columnid}/list2/{catid}/{subcatid}', 'ColumnController@list2CatIndex');
        // 获取二级栏目下的媒资
        $app->get('/{spid}/{termid}/column/{columnid}/list2/{subcolumnid}', 'ColumnController@vassetiDetails');
        // 获取指定服务商指定点播节目META信息
        $app->get('/{spid}/{termid}/vasset/{vassetid}/meta', 'VassetController@vassetMeta');
        // 获取指定服务商指定点播节目media信息
        $app->get('/{spid}/{termid}/vasset/{vassetid}/media', 'VassetController@vassetMedia');
        // 获取指定节目所属定价(用于鉴权)
        $app->get('/vasset/{vassetid}/price', 'VassetController@getPrice');
        // 获取指定媒资播放串接口
        $app->get('/vasset/{vassetid}/{servicecode}/{servicetype}/playback_string', 'VassetController@playbackString');
        // 获取指定媒资套餐信息接口
        $app->get('/vasset/vasset_package', 'VassetController@vassetPackage');
        // 获取指定服务商指定频道的数据  频道详情
        $app->get('/{spid}/{termid}/vchan/{vchanid}/meta', 'VchanController@vchanMeta');
        // 获取指定服务商指定频道的播放数据 频道播放详情
        $app->get('/{spid}/{termid}/vchan/{vchanid}/media', 'VchanController@vchanMedia');

        // 添加收藏
        $app->post('/{spid}/ugc/favorite/{termid}/vasset', 'FavoriteController@store');
        // 展示全部收藏信息
        $app->get('/{spid}/ugc/favorite/{termid}/vasset/list', 'FavoriteController@favoriteList');
        // 展示收藏分类列表
        $app->get('/{spid}/ugc/favorite/{termid}/vasset/list0', 'FavoriteController@favoriteList0');
        // 根据分类获取媒资收藏媒资信息
        $app->get('/{spid}/ugc/favorite/{termid}/{vcattagid}/vasset/list1', 'FavoriteController@favoriteList1');
        // 取消收藏
        $app->post('/{spid}/ugc/unfavorite/{termid}/vasset', 'FavoriteController@delete');
        // 检查媒资是否被收藏
        $app->get('/{spid}/ugc/favorite/{termid}/vasset/{vassetid}/favorited', 'FavoriteController@vassetiFavorite');

        // 查看专题详情
        $app->get('/{spid}/{termid}/album/{albumid}', 'AlbumController@show');
        $app->get('/template_type/{template_type}/template_no/{template_no}', 'TemplateAreaDataController@templateAreaDataShow');
        // 获取指定服务商指定媒资的产品包
        $app->get('/{spid}/{termid}/pm/pmtag/{vassetid}', 'PmController@Pmtags');

        // 获取当前媒资所属产品包
        $app->get('/{spid}/{termid}/pmtag/{vassetid}', 'PmController@getPmTagByVasseti');

    }
);

// dingo
$api = app('Dingo\Api\Routing\Router');
// v1 version API
// add in header    Accept:application/vnd.lumen.v1+json
$api->version('v1', [
    'namespace'  => 'App\Http\Controllers\Api\V1',
    'middleware' => [
        // 'auth:api',
        'cors',
        //'api.throttle'
    ],
    // each route have a limit of 100 of 1 minutes
    //'limit' => 100, 'expires' => 1
], function ($api) {
    /**
     * 孝乐OTT - 收藏接口
     */
    // 添加收藏
    $api->post('/ott/favor', 'FavorController@postStore');
    // 获取收藏列表
    $api->get('/ott/favor/{token}', 'FavorController@getFavorsByUserId');
    // 根据分类获取收藏列表
    $api->get('/ott/favor/{token}/{asset_type}', 'FavorController@getFavorByAssetType');

    // 删除收藏
    // $api->get('/ott/favor/{favor}/delete', 'FavorController@deleteAllFavor');
    // 根据分类取消收藏
    $api->get('/ott/favor/{favor}/{asset_type}/delete', 'FavorController@deleteAllFavorByType');

    // 根据分类取消收藏
    $api->get('/ott/favor/{token}/{asset_type}/{asset_id}/delete', 'FavorController@delete');
    // Auth
    // login
    $api->post('authorizations', [
        'as'   => 'authorizations.store',
        'uses' => 'AuthController@store',
    ]);
    // User
    $api->post('users', [
        'as'   => 'users.store',
        'uses' => 'UserController@store',
    ]);
    // user list
    $api->get('users', [
        'as'   => 'users.index',
        'uses' => 'UserController@index',
    ]);
    // user detail
    $api->get('users/{id}', [
        'as'   => 'users.show',
        'uses' => 'UserController@show',
    ]);

    // // POST
    // // post list
    // $api->get('posts', [
    //     'as' => 'posts.index',
    //     'uses' => 'PostController@index',
    // ]);
    // // post detail
    // $api->get('posts/{id}', [
    //     'as' => 'posts.show',
    //     'uses' => 'PostController@show',
    // ]);
    // // POST COMMENT
    // // post comment list
    // $api->get('posts/{postId}/comments', [
    //     'as' => 'posts.comments.index',
    //     'uses' => 'CommentController@index',
    // ]);
    // /*
    //  * 对于authorizations 并没有保存在数据库，所以并没有id，那么对于
    //  * 刷新（put) 和 删除（delete) 我没有想到更好的命名方式
    //  * 所以暂时就是 authorizations/current 表示当前header中的这个token。
    //  * 如果 tokekn 保存保存在数据库，那么就是 authorizations/{id}，像 github 那样。
    //  */
    // $api->put('authorizations/current', [
    //     'as' => 'authorizations.update',
    //     'uses' => 'AuthController@update',
    // ]);
    // // need authentication
    // $api->group(['middleware' => 'api.auth'], function ($api) {
    //     /*
    //      * 对于authorizations 并没有保存在数据库，所以并没有id，那么对于
    //      * 刷新（put) 和 删除（delete) 我没有想到更好的命名方式
    //      * 所以暂时就是 authorizations/current 表示当前header中的这个token。
    //      * 如果 tokekn 保存保存在数据库，那么就是 authorizations/{id}，像 github 那样。
    //      */
    //     $api->delete('authorizations/current', [
    //         'as' => 'authorizations.destroy',
    //         'uses' => 'AuthController@destroy',
    //     ]);
    //     // USER
    //     // my detail
    //     $api->get('user', [
    //         'as' => 'user.show',
    //         'uses' => 'UserController@userShow',
    //     ]);
    //     // update part of me
    //     $api->patch('user', [
    //         'as' => 'user.update',
    //         'uses' => 'UserController@patch',
    //     ]);
    //     // update my password
    //     $api->put('user/password', [
    //         'as' => 'user.password.update',
    //         'uses' => 'UserController@editPassword',
    //     ]);
    //     // POST
    //     // user's posts index
    //     $api->get('user/posts', [
    //         'as' => 'user.posts.index',
    //         'uses' => 'PostController@userIndex',
    //     ]);
    //     // create a post
    //     $api->post('posts', [
    //         'as' => 'posts.store',
    //         'uses' => 'PostController@store',
    //     ]);
    //     // update a post
    //     $api->put('posts/{id}', [
    //         'as' => 'posts.update',
    //         'uses' => 'PostController@update',
    //     ]);
    //     // update part of a post
    //     $api->patch('posts/{id}', [
    //         'as' => 'posts.patch',
    //         'uses' => 'PostController@patch',
    //     ]);
    //     // delete a post
    //     $api->delete('posts/{id}', [
    //         'as' => 'posts.destroy',
    //         'uses' => 'PostController@destroy',
    //     ]);
    //     // POST COMMENT
    //     // create a comment
    //     $api->post('posts/{postId}/comments', [
    //         'as' => 'posts.comments.store',
    //         'uses' => 'CommentController@store',
    //     ]);
    //     $api->put('posts/{postId}/comments/{id}', [
    //         'as' => 'posts.comments.update',
    //         'uses' => 'CommentController@update',
    //     ]);
    //     // delete a comment
    //     $api->delete('posts/{postId}/comments/{id}', [
    //         'as' => 'posts.comments.destroy',
    //         'uses' => 'CommentController@destroy',
    //     ]);
    // });
});
